const crypto = require('crypto')
const { insertUser, isUserExist } = require('../model/user')

const secret = 'kangqiang@163.com'

const register = (req, resp) => {
    const { username, phone, password } = req.body
    isUserExist({ phone }).then(respmodel => {
        const { isExist } = respmodel;
        if (isExist) {
            // 用户已存在
            resp.json({
                code: 300,
                body: {
                    msg: '用户已存在'
                }
            })
        } else {
            // 用户不存在，可以注册
            //crypto.createHmac('sha256', secret)里面的sha256好像不可以改，否则会出错
            const hash = crypto.createHmac('sha256', secret)
                .update(password)
                .digest('hex');
            insertUser({ username, phone, password: hash }).then(user => {
                resp.json({
                    code: 200,
                    body: {
                        msg: '注册成功',
                        user
                    }
                })
            }).catch(err => {
                resp.json({
                    code: 401,
                    body: {
                        msg: '网络错误，请重试',
                        err
                    }
                })
            })
        }
    }).catch(err => {
        resp.json({
            code: 400,
            body: {
                msg: '网络错误，请重试6666',
                err
            }
        })
    })

}

const login = (req, resp) => {
    const { phone, password, expires } = req.body
    const hash = crypto.createHmac('sha256', secret).update(password).digest('hex')
    isUserExist({ phone, password: hash }).then(respmodel => {
        const { isExist, userinfo } = respmodel
        if (isExist) {
            const { username } = userinfo
            // 登录成功，后端存一个会话存储
            // 后端在做session存储的时候就会有一个sessionId，是一个随机字符串
            // 这个字符串会随着resp.json一起响应给前端，还会自动存到前端的cookie里
            if (expires === '7') {
                req.sessionOptions = {
                    maxAge: 7 * 24 * 3600 * 1000
                }
            }
            req.session = {
                isLogin: true,
                username,
                phone
            }

            resp.json({
                code: 200,
                body: {
                    msg: '登录成功'
                }
            })
        } else {
            resp.json({
                code: 400,
                body: {
                    msg: '用户名或者密码错误'
                }
            })
        }
    })
}

const isLogin = (req, resp) => {
    // 取到cookie，验证token跟我登录的时候产生的令牌是否一致
    // 这个对比过程中间件已经帮我们完成了，所以我直接去取值即可
    // 只要能够取到session值，就说明令牌的对比是正确的
    if (req.session.isLogin) {
        // 已登录
        resp.json({
            code: 200,
            body: {
                msg: '已登录',
                username: req.session.username,
                phone: req.session.phone
            }
        })
    } else {
        // 未登录
        resp.json({
            code: 400,
            body: {
                msg: '未登录'
            }
        })
    }
}

const unLogin = (req, resp) => {
    // 清空session
    req.session = null
    resp.json({
        code: 200,
        msg: '退出登录成功'
    })
}

module.exports = {
    register,
    login,
    isLogin,
    unLogin
}